WPF和Silverlight版Chart2D帮助文档
日期时间分组

C1Chart(在线文档 'C1Chart 类')控件在任何数据系列上都允许自定义聚合。通过为AggregateGroupSelector(在线文档 'AggregateGroupSelector 委托')属性定义您自己自定义聚合逻辑,C1Chart控件可以按照任何您期望的方式对数据进行分组。例如,您可以在日期字段中提供分组,以汇总每月或每年的值。你甚至可以建立自己的数值范围和类别对数据点进行分组。

本主题假定您在XAML中创建了一个C1Chart 控制并把它命名为“c1chart1”。关于如何通过XAML创建一个控件的更多信息,请参见快速入门(在线文档)或者概念和主要属性主题。

为了创建自定义聚合函数,首先需要创建待汇总的数据。您可以创建一个简单的业务对象,具有两个属性:Value(双精度浮点数)和日期(日期类型)。在下面的例子中,这个业务对象被称为SampleItem。做为参考,您可以在本主题的底部找到这个类型的定义。创建一个包含随机数据的ObservableCollection:

C#
拷贝代码
Random rnd = new Random();
ObservableCollection<SampleItem> _items = new ObservableCollection<SampleItem>();
for(int i = 0; i < 400; i++)
{
    _items.Add(new SampleItem { Value = rnd.Next(0, 100), Date = DateTime.Now.AddDays(i) });
}

之后绑定您的XYDataSeries至项目的集合:

C#
拷贝代码
// 配置数据系列
var ds = new XYDataSeries()
{
    ItemsSource = _items,
    ValueBinding = new Binding { Path = new PropertyPath("Value") },
    XValueBinding = new Binding { Path = new PropertyPath("Date") },
    Aggregate = Aggregate.Sum,
    AggregateGroupSelector = GroupSelectorByDate,
    Label = "Sales"
};

您在上面的代码中设置了两个关键属性:Aggregate 和AggregateGroupSelector。Aggregate 属性决定用作聚合图表数据的函数。AggregateGroupSelector 属性决定为数据系列提供分组选择器的函数。在您设置了自定义函数之前,虽说添加系列到图表可以设置沿着x-轴显示日期。您还可以设置X轴为显示时间,因此日期显示正确:

C#
拷贝代码
// 配置图表
c1Chart1.BeginUpdate();
c1Chart1.ChartType = ChartType.Column;

// 添加数据系列
c1Chart1.Data.Children.Add(ds);

// 使用特定格式的时间坐标轴
c1Chart1.View.AxisX.IsTime = true;
c1Chart1.View.AxisX.AnnoFormat = "yyyy";
c1Chart1.View.AxisX.UseExactLimits = true;

// 应用一些风格
c1Chart1.View.AxisX.MajorGridStrokeThickness = 0;
c1Chart1.View.AxisY.MajorGridFill = new SolidColorBrush(Colors.LightGray);
c1Chart1.EndUpdate();

注意,当您需要沿x轴显示日期,您需要设置的时间属性设置为true。您将按年进行分组,因此请注意,AnnoFormat属性已经被设置为显示完整的年份。

下面的代码定义了GroupSelectorByDate 函数。该函数将调用您的图表中的每个数据点,并确定该数据所属的组。

C#
拷贝代码
double GroupSelectorByDate(double x, double y, object o)
 {
     // 将年份作为双精度浮点数值返回
     DateTime dt = x.FromOADate();
     // 为了按照年份进行分组,我们返回日期的年份信息    
    // 同时也设置 AnnoFormat 为 "yyyy"
     return new DateTime(dt.Year, 1, 1).ToOADate();   
 }

该分组选择器函数将始终有三个参数,将总是返回一个双精度浮点数值。属于同一组的数据点应该返回同一个值,该值从该函数返回。因为您需要按年进行分组,该函数返回一个新的DateTime类型的值,该值设置为目标年份的第一天。每一个发生在2014年的数据点将通过该函数返回相同的日期值(作为一个双精度浮点数值),因此被放在同一个分组。

 

 

现在,如果你还想通过一个月进行分组的话,那么你只需要修改其中两行代码:

C#
拷贝代码
double GroupSelectorByDate(double x, double y, object o)
{
    // 返回年份为双精度浮点数
    DateTime dt = x.FromOADate(); 
    // 为了按照月份进行分组,我们返回该日期的年份和月份值         
    return new DateTime(dt.Year, dt.Month, 1).ToOADate(); 
}

您也必须要修改AnnoFormat属性以便能够正确显示月份:

C#
拷贝代码
c1Chart1.View.AxisX.AnnoFormat = "MM/yyyy";

由此产生的图表将类似于以下图像: 

 

这里是SampleItem 类,供参考:

C#
拷贝代码
public class SampleItem
    {
        public double Value { get; set; }
        public DateTime Date { get; set; }
    }

 

查看其它

 

 


产品网站:http://www.gcpowertools.com.cn  |  咨询热线:4006576008   |   ©2015 西安葡萄城